NuttX-8.2
---------

The 133rd release of NuttX, Version 8.2, was made on November 16, 2019,
and is available for download from the Bitbucket.org website. Note
that release consists of two tarballs: nuttx-8.2.tar.gz and
apps-8.2.tar.gz. These are available from:

https://bitbucket.org/nuttx/nuttx/downloads
https://bitbucket.org/nuttx/apps/downloads

Both may be needed (see the top-level nuttx/README.txt file for build
information).

Additional new features and extended functionality:
---------------------------------------------------

* Core OS:

- Signals: Add support for SIGPIPE default action. SIGPIPE uses
SIG_SIGPIPE_ACTION which terminates process by default. It also
could be ignored. From liuhaitao.
- Spinlocks: Remove support for re-entrant spinlocks. They seemed
like a good idea, but they are never used. From Xiang Xiao.
- Memory Manager: Remove the assumption that one character equals
eight bits. From Xiang Xiao.
- Power Management: Historically, the NuttX PM subsystem has
consisted of two functional components: (1) an "Upper" part that
detects state changes based on a random walk driven by activity
levels, and (2) and "lower" part that implementst the state changes.
This change decouples that upper activity-based logic from the lower
random walk logic and allows use of other upper state detection
logic (such as a custom, application-specific state machine). From
Matias Nitsche.
- boardctl(): Expose power manager function through boardctl()
interface. From Xiang Xiao.

* File System/Block and MTD Drivers:

- GD25: Add support for a new FLASH vendor. From zhangbo_a.
- GD25: Add support for GD25 device with 256-Mbit capacity. From
YanLin Zhu.
- GD25: Add 4-byte address operation for capacity larger than
128-Mbit. From YanLin Zhu.
- GD25: Add gd25_lock/unlock to case: enable 4-bytes address From
ligd.
- GD5F: Add gigadevice SPI NAND FLASH driver. From YanLin Zhu.

* Networking/Network Drivers:

- Networking: Use ntoh() when printing IPv6 addresses so that the
addresses appear in friendlier host order vs. network order. From
Bernd Walter.
- Netlink: Implement minimal NETLINK_ROUTE socket functionality that
can (for now) be use used to obtain a list of network devices, IPv4
ARP and IPv6 Neighbor tables, and IPv4 and IPv6 routing tables.
From Gregory Nutt.

* Wireless/Wireless Drivers:

- BCM43438A1 Bluetooth: Add support for the BCM43438A1 Bluetooth
capability. From Dave Marples.
- HCIUART Shim: Add a serial 'shim' to allow any regular serial port
to support a Bluetooth H4 interface and to be used to drive a
Bluetooth device. From Dave Marples.
- BCM4343x HCIUART: BCM4343x HCIUART support. From Dave Marples.
- BCM43xxx: Move drivers/wireless/ieee80211/ to
drivers/wireless/ieee80211/bcm43xxx/ since the directory only
contains only BCM43362 and BCM43438 related code. From Xiang Xiao.
- GS2200M: Add reset handler to interface. Add reset and un-reset
sequence in driver. From Masayuki Ishikawa.

* Audio/Audio Drivers:

- Audio: Add message type to support audio trigger. From anchao.

* Other Common Device Drivers:

- Altair: Add support for the altair LTE modem driver. From Alin
Jerpelea.
- MCP2515: MCP2525 SPI STD-EXT ID fixes. From DisruptiveNL.
- OpenAMP: Brings in the drivers needed to support OpenAMP. These
changes were ported from https://github.com/FishsemiCode/nuttx.
This port was effort of a number of people, I rather arbitrarily
gave authorship to Guiding Li because he has the largest number of
fundamental quashed commits from the Xiamoi repository. From
Guiding Li.

* Simulator:

- Simulator: Add stack coloration feature. From ligd.
- Simulator: Report PM activity on simulated UART. From Matias
Nitsche.
- Simulator: Add host ftruncate() support. From chao.an.
- Simulator: Replace all CONFIG_DEV_CONSOLE with USE_DEVCONSOLE for
arch/sim and compile up_devconsole.c conditionally. From Xiang
Xiao.
- Simulator OpenAMP: Support OpenAMP between two simulator
instances. Please read rpserver/rpproxy section in
boards/sim/sim/sim/README.txt for more information. From chao.an.

* ARMv7-M

- ARMv7-M: Add BPIALL register address. From Dave Marples.
- ARMv7-M MPU: Add user peripheral helper

* Atmel SAMD2/L2 Boards:

- Arduino-M0: Add initial board support for the Arduino M0 which is
based on the SAMD21 chip. Include nsh and usbnsh configurations.
From Alan Carvalho de Assis.

* NXP i.MXRT Drivers:

- i.MXRT LCD: Add support for LCD. Clean up some LCD-related
interfaces. From Fabio Balzano.
- i.MXRT Serial: This change improves the performance of UART serial
ports on the IMXRT by enabling the RX & TX FIFOS and transmission on
the holding register being empty (TDRE) rather than transmission
being complete (TC). From Dave Marples.
- i.MXRT Pin Mux: This change separates out the pinmux and iomux
functions cleanly. For ease of conversion default IOMUX definitions
have been added into imxrt_iomux.h. The change effectively does two
things: (1) unifies the iomux definitions - previously some pins
had them, and some didn't. This effectively made it impossible to
use the pinmuxes without editing the header file in the standard
distribution tree. And (2) unifies the pin definitions so that every
pin now has a suffix. This makes it *much* easier to see when a pin
is in use in your code, because it will always have a definition in
your board.h file. From Dave Marples.
- IMXRT1020-EVK: Add support for the MIMXRT1021-EVK board. It
features nsh, netnsh and usdhc sample configurations. From Dave
Marples.

* NXP i.MXRT Boards:

- IMXRT1060-EVK: Add basic LCD support for the board IMXRT1060-EVK.
From Fabio Balzano.
- IMXRT1060-EVK: Added Littlevgl demo configuration into the
IMXRT1060-EVK board directory. From Fabio Balzano.

* NXP/Freescale Kinetis Drivers:

- Kinetis Ethernet: Add support for TJA1100 PHY. From David Sidrane.

* NXP S31K1xx:

- S32K1xx: Support configuration and initialization of the flash
configuration bytes. From Gregory

* NXP S31K1xx Boards:

- S32K1**EVB: Create a special FLASH section to hold the FLASH
configuration bytes. From Gregory Nutt.
- S32K146EVB: Added configuration script and instructions for using
Thread-Aware OpenOCD for the S32K146 with Eclipse. From Han
Raaijmakers.

* Renesas RX65N:

- RX65N: Adds a port of to the Renesas RX65N Micro-controller. This
port includes Serial (UART) driver (13 ports) and Ethernet
driver. From Anjana.

* Renesas RX65N Boards:

- RSK RX65N-2MB: Add support for the RSK RX65N-2MB board. From
Anjana.
- GR-Rose: Add support for the GR-Rose board. From Anjana.

* Sony CXD56xx

- CXD56xx CPU FIFO: Add configurations for CPU FIFO elements. From
Alin Jerpelea.
- CXD56xx Loader: Update loader and gnssfw ver. 17660. From Alin
Jerpelea.
- CXD56xx SMP: Add support for SMP. To run cxd56xx in SMP mode, new
boot loader which will be released later must be used. From
Masayuki Ishikawa.
- CXD56xx SMP: Add IRQ routing for SMP in cxd56_irq.c. In CXD56xx,
each external interrupt controller can be accessed from a local
APP_DSP (Cortex-M4F) only. This change supports IRQ routing for SMP
by calling up_send_irqreq() in both up_enable_irq() and
up_disable_irq(). From Masayuki Ishikawa.

* Sony CXD56xx Drivers:

- CXD56xx I2C: Add ability to set the i2c frequency to other than just
100 or 400 Hz. From Alin Jerpelea.
- CXD56xx SDHCI: Reduce power consumption by stopping SD clock. Re-
enable SD clock during access to SD card. Improve GNSS low
sensitivity with SD card inserted. From Alin Jerpelea.

* Sony CXD56xx Spresense Board:

- CXD56xx Board Common: Add the Altair LTE modem support on the
Spresense board. From Alin Jerpelea.
- CXD56xx Board Common: Add Spresense Image Processor. Enable support
for accelerated format converter, rotation and so on. using the CXD5602
image processing accelerator.
- Spresense: Add board specific pin configurations of CXD5602 pins to
fit Spresense board. From Takayoshi Koizumi.
- Spresense: Add a configuration option to select if an extension
board is attached to the SPresence. If there is no extension board
attached, the SPresense may run in a low-power mode by default (as
determined by the CONFIG_CXD56_CUSTOM_PINCONFIG option). If an
extension board is present, then the SPresense will need to run at a
higher power mode, selected by the new CONFIG_SPRESENSE_EXTENSION
option. From Gregory Nutt.
- Spresense Camera: Add ISX012 camera initialization and
configuration. From Alin Jerpelea.
- Spresense OS test: Enable ostest in rndis/defconfig and
wifi/defconfig. From Masayuki Ishikawa.
- Spresense: Add --gc-sections to LDFLAGS and add -ffunction-sections
and -fdata-sections to ARCHCFLAGS in scripts/Make.defs. From
Masayuki Ishikawa.
- Spresense SMP: Add smp configuration. From Masayuki Ishikawa.
- Spresense SCU: The SCU has to be initialized at bootup on Spresense
board because several functions depend on it. Add audio control
definitions. Add configuration for the audio implementation. From
Alin Jerpelea.
- Spresense: Add audio and board audio control implementation. From
Alin Jerpelea.
- Spresense: Sdd power_control and audio_tone_generator. Add a simple
way to control the audio buzzer with defined frequency for user-space
apps. From Alin Jerpelea.
- Spresense: Add the optional initialization of GNSS and GEOFENCE at
boot if the drivers are enabled From Alin Jerpelea.
- Spresense: Add LTE configuration. From Alin Jerpelea.
- Spresense: Enable high current mode for the Spresense Extension
board on all examples that have SDCARD support. From Alin Jerpelea.
- Spresense: Add lcd examples configuration. This is a configuration
for the basic nx examples From Alin Jerpelea.

* STMicro STM32:

- STM32F0/L0/G0: Add support for STM32G070xx family. From Daniel
Pereira Volpato.
- STM32F0/L0/G0 Power: Scale dynamic voltage and flash wait states
properly on STM32G0 chips. Included preliminary implementation of
PWR module VOS support. From Daniel Pereira Volpato.
- STM32L4R5ZI: Add support for the STM32L4R5ZI chip type. From Jussi
Kivilinna.
- STM32 L4+ DMA: Add DMA support for STM32L4+ series. From Jussi
Kivilinna.
- STM32 L4 Clocking: Enable "Range 1 boost" mode if any PLL freq
above 80 MHz. From Jussi Kivilinna.
- STM32 L4 LPTIM: Add support for LPTIM timers on the STM32L4 as PWM
outputs. From Matias N.
- STM32 H7 Progmem: Add FLASH progmem support. From David Sidrane.

* STMicro STM32 Drivers:

- STM32 Serial: Single Wire add pull{up|down|none} via new IOCTL
command. From David Sidrane.
- STM32 F0/L0/G0 Serial: Single Wire add pull{up|down|none} via
new IOCTL command. From David Sidrane.
- STM32 F0/L0/G0 PWM: Add PWM support. From Daniel Pereira Volpato.
- STM32 G0 TIM: Support timers available on STM32G070. Includes TIM1
PIOs, TIM driver lower-half. From Daniel Pereira Volpato.
- STM32 F7 Serial: Single Wire add pull{up|down|none} via new IOCTL
command. From David Sidrane.
- STM32 H7 BBSRAM: Exclude BBSRAM from cacheable when
CONFIG_ARMV7M_DCACHE. ST placed the STM32H7 BBSRAM in the SRAM
default memory region which is cacheable. This change sets the
BBSRAM memory range to non-cacheable. From David Sidrane.
- STM32 H7 SDMMC: Add SDMMC support and IDMA as well as interrupt
driven transmission. Support pull-ups and SDIO. From David Sidrane.
- STM32 H7 Serial: Single Wire add pull{up|down|none} via new IOCTL
command. From David Sidrane.
- STM32 L4 OTGFS: Enable OTGFS for STM32L4+ series. The OTGFS
peripheral on stm32l4x6 and stm32l4rxxx reference manual is exactly
the same. From Jussi Kivilinna.
- STM32L4 IDLE Loop: (1) Added BEGIN_IDLE()/END_IDLE() to stop call
so that we also get notification via LED of the STOP mode, (2) Added
the stm32l4_clockenable call as previously discussed, and (3) Added
call to pm_changestate() to inform drivers we're back to running
after the call to stm32l4_stop() returns. From Matias N.
- STM32 L4 Serial: Single Wire add pull{up|down|none} via new IOCTL
command. From David Sidrane.

* STMicro STM32 Boards:

- Nucleo-G070RB: Initial support for board STM32 NUCLEO-G070RB,
including NSH config. Enables PWR peripheral and set SYSCLK to
maximum frequency. From Daniel Pereira Volpato.
- Nucleo-G070RB: Enable basic timers. Add TIMx clock frequencies to
board.h. From Daniel Pereira Volpato.
- Nucleo-G070RB: Add PWM support and GPIO_TIM3_* mappings. Add a PWM
configuration. From Daniel Pereira Volpato.
- Nucleo-G070RB: Add button driver support, Add driver support. Add
GPIO configuration. From Daniel Pereira Volpato.
- Nucleo-L476RG: Add required definitions if libcxx is enabled. From
Matias N.
- Nucleo-L476RG: Add support for LPTIM timers as PWM outputs. From
Matias N.
- Nucleo-H743ZI: Added GPIO device driver for user-space apps. From
Heiko Demlang.
- olimex-stm32-e407: Newer Olimex E407 boards are populated with
STM32407ZE chips. From David Alessio.
- STM32F4-Discovery: Add support for external DS1307 module. From
Alan Carvalho de Assis.
- STM32F4-Discovery: Add support for MMCSD_SPI. This change works
with STM32F4 Discovery Shield plus microSD click From Masayuki
Ishikawa.
- STM32F4-Discovery: Add support for gs2200m. Works with mikroe
STM32F4 Discovery Shield (slot3) From Masayuki Ishikawa.

* TI Tiva:

- TM4C129ENCPDT: Add support for Tiva TM4C129ENCPDT. From Nathan
Hartman.

* TI Tiva Boards:

- TM4C123G-Launchpad: SPI CAN functionality on TM4C123GXL. From
DisruptiveNL.

* Build System:

- tools/Config.mk: Eliminate use of the built-in implicit rules.
From anchao.
- tools/Config.mk and Makefile.unix: Support the incremental build
for configuration change. From Xiang Xiao.
- tools/Config.mk: Support the ability to change the CFLAGS for
the compilation of a single file. Set special compiler options as
follows the rule: sourcefile + fixed suffix "_[A|C|CPP|CXX]FLAGS".
For example in apps/examples/hello/Makefile:
$(SRCDIR)/hello_main.c_CFLAGS = -DTEST. From Xiang Xiao.
- Configuration: Auto-select CONFIG_BUILD_LOADABLE when either
CONFIG_BUILD_KERNEL or CONFIG_BINFMT_LOADABLE is selected. From
Xiang Xiao.

* Libraries/Header Files:

- libs/libc: Add CONFIG_MODLIB_SYSTEM_SYMTAB to generate the symbol
table for dlopen/insmod. From Xiang Xiao.
- getdelim() and getline(): Add implementations of the POSIX
functions getdelim() and getline(). Because of how the function is
defined, getline() cannot be used on platforms that use CR-LF lin
terminations. From Gregory Nutt.
- alarm(), setitimer(), and getitimer(): Implement alarm(),
setitimer() and getitimer() APIs. From liuhaitao.

* Tools:

- tools/mkexport.sh: Copy the essential build script files too and
move Make.defs/gnu-elf.ld into scripts like board folder layout.
From Xiang Xiao.
- tools/mkexport.sh: Should export full content for FLAT build even
with CONFIG_BUILD_LOADABLE. From Xiang Xiao.
- tools/testbuild.sh: Add an option to select the number of CPUs to
use with 'make' From Gregory Nutt.
- tools/indent.sh: Add a command line option to suppress reformatting
of comments. This is useful when comments are already correct
and/or contain formatted data such as tables or lists. From Gregory
Nutt.
- tools/nxstyle.c: Add detection of carriage returns. Improve
reporting of TABs. From Gregory Nutt.
- tools/nxstyle.c: Add logic to detect if there is a blank line
following the final right brace. From Gregory Nutt.
- tools/nxstyle.c: Eliminate false alarm errors on comments that are
to the right of code when the comment terminator is on the same
line as the last of the comment. From Gregory Nutt.
- tools/nxstyle.c: Eliminate false alarms when checking for
alignment of comments to the right of code. Fix check for C++ style
comments so that strings like http:// and https:// do not generate
false alarms. From Gregory Nutt.
- tools/nxstyle.c: Eliminate false positive 'Invalid character after
asterisk in comment block'. From Gregory Nutt.

* apps/ Build System:

- apps/ Build System: Numerous changes for improvements and general
clean-up of the apps/ build system. Too many small and individual
changes to list here. Includes many improvements related to loadable
modules and symbol table generation, removal of duplicated logic,
renaming of binary directories, use of cygpath, etc. From Xiang Xiao.
- apps/Application.mk: Support the ability to change the CFLAGS for
the compilation of a single file. Set special compiler options as
follows the rule: sourcefile + fixed suffix "_[A|C|CPP|CXX]FLAGS"
As an example in apps/examples/hello/Makefile:
$(SRCDIR)/hello_main.c_CFLAGS = -DTEST
From Xiang Xiao.
- apps/Application.mk and main.c files: Change builtin's entry point
from main to xxx_main by macro expansion. This change make the
entry point fully compliant with POSIX/ANSI standard. From Xiang
Xiao.

* Examples/Tests: apps/examples:

- apps/examples/audio_rttl: Add a simple RTTL player demo that is
able to play tunes according to an RTTL song. From Alin Jerpelea.
- apps/examples/bmi160: Add bmi160 example app. This app will read
the BM160 data and list it on the NSH console. From Alin Jerpelea.
- apps/examples/charger: Simple charger example that will display on
the console voltage and current values. From Alin Jerpelea.
- apps/examples/netlink_route: Add test/example of NETLINK_ROUTE
'get' operations. From Gregory Nutt.

* NuttShell: apps/nshlib:

- apps/nshlib/: Add rptun cmd for boot remote core. From ligd.
- apps.nshlib/: Add a -t option to the arp command which will enable
printing the entire ARP table. From Gregory Nutt.
- apps/nshlib/: Add new NSH command, 'pmconfig'. From ligd.

* System Utilities: apps/system:

- apps/system/cle: Add basic color support to the CLE editor.
From Dave Marples.
- apps/system/i2c: While many I2C slave devices have multiple
indexed registers, some have only one register and it's not indexed.
For example, the I2C bus switch TCA9548A has only a Control
Register, attempting to index to "Reg[0]" alters its contents to
0x00 disabling all subordinate buses. This change fixes that
problem by simply trying to read something/anything from the slave.
This also helps coax out slaves with register files that start from
a higher index, i.e. the AT24CS0x, FLASH chips with a UUID that
appears as a 2nd I2C slave at (address+8), report their serial
number at Reg[80]-Reg[8F] and will NAK a read of Reg[0]. Modified
get/set to prevent write of reg index if not specified.
- apps/system/i2c: Added a 'dump' command to issue a single
transaction to retrieve multiple bytes from an I2C slave and
register/offset. From David Alessio.
- apps/system/spi: Add options to specify devtype, id for chip
select. From David S. Alessio.
- apps/system/symtab: Remove system/symtab since the same
functionality exist in nuttx now. From Gregory Nutt.
- apps/system/usrsock_rpmsg: Add rpmsg based usrsock implementation.
From Jianli Dong.

* Network Utilities: apps/netutils:

- apps/netutils/cjson/: Update default version to 1.7.12. Previous
releases raise compilation warnings about redefined true/false.
From raiden00pl.
- apps/netutils/netlib/: Add a function to read the entire ARP table
using NETLINK_ROUTE protocol. From Gregory Nutt.
- apps/netutils/netlib/: Add support for retrieving a snapshot of the
IPv6 neighbor table using Netlink sockets. From Gregory Nutt.
- apps/netutils/netlib/: Add a utility function that will return a
list of all network devices in the UP state. From Gregory Nutt.
- apps/netutils/netlib/: Add function to retrieve routing tables
using Netlink. From Gregory Nutt.

Bugfixes:
---------
Only the most critical bugfixes are listed here (see the ChangeLog for a
more complete list of bugfixes and for additional, more detailed bugfix
information):

* Core OS:

- Signals: Fix undefined reference from sig_default.c to
sched_suspend() if CONFIG_SIG_SIGSTOP_ACTION is not defined. From
raiden00pl.
- waitpid(): Fix a NULL pointer dereference on race without
DEBUG_ASSERT. From David Alessio.
- WD Timers: Back out a kludge-workaround in wd_start for an SDCC
compiler problem fix back in Feb 2017. That workaround now appears
to conflict with newer GCC versions using (unsupported) warning
options and SDCC no longer needs the work-around. From Gregory
Nutt.
- clock_systimespec(): Fix early timespec overflow if using 32 bit
system timer. From Jens Gräf.
- Spinlocks: spin_trylock handle memory barrier and instrumentation
correctly. From Xiang Xiao.
- Power Management: Fix a problem where a timer cannot start when it
encounters a very small pmtick. From ligd.
- boardctl(BOARDIOC_MKRD): This change corrects a problem with NSH:
NSH was calling the OS internal function ramdisk_register() in
violation of the portable POSIX interface. This change solves the
problem by introducing a new boardctl() function BOARDIOC_MKRD
which moves the RAM disk creation into the OS. From Gregory Nutt.
- boardctl(BOARDIOC_ROMDISK): Add support for the new
BOARDIOC_ROMDISK command. This allows applications to create ROMFS
block drivers without illegal direct calls to romdisk_register.

* File System/Block and MTD Drivers:

- SmartFS: Fix O_CREAT without O_TRUNC truncating existing file.
Also nothing in POSIX says that O_APPEND should prevent O_TRUNC.
From Juha Niskanen.
- SmartFS: Honor O_APPEND on writes. Also document pwrite() bug/
limitation. From Juha Niskanen.
- GD25: spi_devid argument was not used in initialization. GD25
driver was always using priv->spi_devid initialized to zero by
kmm_zalloc(). This change initializes it from the supplied function
argument. From Juha Niskanen.
- MMC/SD: Set wrbusy after success of all the operations. Any
failure could leave wrbusy set when it should not be if the
operation failed. From David Sidrane.
- MMC/SD: Enter a removed card state On a failure. If we fail to
read cardstatus in mmcsd_transferready consider this a hard error
and set the card to removed. From David Sidrane.
- MMC/SD (SDIO): Align DMA buffer for MBURST size. From David S.
Alessio.

* Networking/Network Drivers:

- Socket close(): Fixed problems noted by Bernd Walter: Eliminate an
incomplete test when a disconnection event happens. When a
disconnection event occurs, the close logic MUST always terminate
the wait. The conditional test was not incorrect, however, it
lacked 'else' logic and would simply ignore that disconnection event
in some cases. That is bad because there may not be another
disconnection event and that can lead to hangs (or at least very,
very long delays). From Gregory Nutt.
- ICMPv6: Dispatch ICMP_POLL to device's callback list too since
icmpv6_neighbor stills append the callback into this list. From
Gregory Nutt.
- ICMPv6: Decouple autoconfig and ICMPv6 socket to avoid an invalid
Kconfig combination. From Xiang Xiao.
- ICMPv6: cmpv6_autoconfig() error handling must not overwrite
overwrite the error code. From Xiang Xiao.
- TCP/UDP: Fix a chicken and egg problem by eliminating the check of
the arp/neighbor tables before packet transmission:
1. For buffered TCP/UDP case, if CONFIG_NET_ARP_SEND /
CONFIG_NET_ARP_IPIN / CONFIG_NET_ICMPv6_NEIGHBOR isn't enabled
and the table doesn't contain the Ethernet address for the
destination IP address yet, then the logic will skip the real
transmission and then ARP/neighbor logic can't steal the final
buffer to generate the ARP/ICMPV6 packet.
2. For all other case, the TCP layer or user program should already
contain the retransmit logic, the check is redundant and may
generate many duplicated packets if ARP/ICMPV6 response is too
slow because the cursor stop forward. If user is still concerned
about the very first packet lost, he could fix the issue by
enabling CONFIG_NET_ARP_SEND / CONFIG_NET_ICMPv6_NEIGHBOR.
From Xiang Xiao.
- UDP sendto(): Add a check for the device that is polling. In the
multiple network device case, this check is necessary to prevent
sending the UDP packet to the wrong device. From Gregory Nutt.

* Wireless/Wireless Drivers:

- MRF24J40: Correct erroneous isolation of address mode field and
subsequent bad comparison. From Gregory Nutt.
- GS2200M: Add SPI_SELECT() to _read/write_data() in gs2200m.c
- BCM43xx Wireless: In the SDIO interface, the behavior of the DMA
setup differs, depending on the hardware capability
SDIO_CAPS_DMABEFOREWRITE. If this capability is set, then the DMA
setup much be done before the transfer setup. Dave Marples
modified this file for the i.MXRT USDHC which does have the
SDIO_CAPS_DMABEFOREWRITE. Xiao Xiang reports that this change
breaks the Wifi on the Photon which does not report the
SDIO_CAPS_DMABEFOREWRITE and suggests reverting the change. In
reality both changes are correct but must be conditioned on the
DMA capability of the underlying SDIO device. From Gregory Nutt.

* Common Drivers:

- Various drivers (Cloned logic): On error, memory was freed, but
the error was not returned. It just continued as though no error
happened. From Petro Karashchenko.
- Serial: Fix data corruption when outputting data in SMP mode From
Masayuki Ishikawa.
- Serial: serial_io.c used signal numbers, but did not include
signal.h. This has no problems but missing signal definitions have
been seen in certain cases. From David Sidrane.
- Serial DMA: Avoid uart_xmitchars_done() move the tail bigger then
head. If ioctl(TCOFLUSH) occurs between uart_xmitchars_dma() and
uart_xmitchars_done(), TCOFLUSH will reset xmit buffer, then
uart_xmitchars_done() will move the 'tail' ahead of 'head', then
sends lots of wrong data. From ligd.
- mkfifo(): mkfifo() should return -1 and set errno on failure From
raiden00pl.
- RAMLog: Fix ramlog readers never awakened up when using ramlog as
syslog or console. We also make an attempt to avoid the thundering
herd problem if there are multiple readers/pollers. This change also
removes forcing CONFIG_RAMLOG_CRLF in nuttx/syslog/ramlog.h as there
is no point of wasting precious RAM for useless characters. From
Juha Niskanen.
- USB CDC/ACM: Fix memory leak of RX failsafe timer. From Juha
Niskanen.
- USB HID Keyboard device: Fix keyboard debounce algorithm used when
CONFIG_HIDKBD_NODEBOUNCE is undefined. From Jeff Theusch.
- USB HID Keyboard: Change default for CONFIG_HIDKBD_POLLUSEC per
recommendation of Jeff Theusch. From Gregory Nutt.
- VL53L1X IOCTLs: IOCTL commands for the VL53L1X did not follow the
sequence. Noted by Daniel Pereira de Carvalho. From Gregory Nutt.
- syslog: syslog_force does not set errno so do not test against it.
From Juha Niskanen.
- syslog: Fix assertion that assumes re-opened syslog file is the
same. Logic in syslog_file_channel() is calling syslog_initialize()
for the default syslog device as a recovery action after failed
syslog_dev_initialize(). From Juha Niskanen.

* Simulator:

- Simulator HostFS: Skip '.' and '..' in readdir' From Xiang Xiao.
- Simulator HostFS: Fix warning: 'mapflags' may be used uninitialized
in this function. From Xiang Xiao.
- Simulator Tickless: Correct the calculation of the Tickless timer
period. Fix some missing initialization of globals and missing
return values. From Matias N.
- Simulator: Add -m32 to HOSTLDFLAGS if enable CONFIG_SIM_M32. From
Xiang Xiao.
- Simulator PM: Fixes compilation for sim target when enabling power
management. From Matias N.
- Simulator Build: Fixes missing recursion into sim board directory
for dependency generation. From Matias N.
- Simulator SIMUART: Remove CONFIG_SIM_UART_DATAPOST for arch/sim.
It's very dangerous to call NuttX API from simuart_thread. From
Xiang Xiao.

* ARMv7-A

- ARMv7-A: Apply Masayuki Ishakawa's change for ARMv7-M to this SMP
architecture as well. From Gregory Nutt.

* ARMv7-M

- ARMv7-M: Fix a deadlock in up_sigdeliver() in SMP mode. In
previous implementation, up_disable_irq() was called before
recovering local context. However, I noticed a deadlock happens in
the following situation. For example, if up_sigdevliver() is in
progress on CPU0 and CPU1 has called up_cpu_paused to CPU0, hence
g_cpu_irqlock has been locked by CPU1, in this case, we would see a
deadlock in later call of enter_critical_section() to restore
irqcount. To avoid this situation, we need to call
enter_critical_section() to break the deadlock. From Masayuki
Ishikawa.

* Atmel SAM3/4 Boards:

- SAM4CM: Fix cpustart() implementation. In Cortex-M, offset 0 in
vector table stores initial stack pointer and offset 4 stores reset
vector. From Masayuki Ishikawa.

* Atmel SAMA5Dx Boards:

- SAMA5D4-EK: Fix bad conditional compilation for
board_app_initialize(). Should depend only on CONFIG_BOARDCTL,
CONFIG_BUILD_KERNEL is irrelevant. From Gregory Nutt.

* Microchip i.MXRT:

- i.MXRT WFI: WFI needs to be disabled on i.MXRT. We found the
reason: The imxrt1050 is configured to use SYSTICK for the kernel
timer, but SYSTICK cannot wake up the MCU from low-power modes.
Disable low-power modes on this MCU until we have support for an
alternative timer. Earlier versions of the board (EVK, not EVKB),
had A0 silicon which by default did not enter low-power mode on a
WFI. With this change in place together with the previous one my
system is stable, just using more power than it should. From Dave
Marples.

* Microchip i.MXRT Drivers:

- i.MXRT Serial: TC (Transmission complete) and TDRE (TX Buffer
Empty) were transposed in imxrt_serial.c. The end result was that
for unoptimized code everything worked fine, but optimized code got
itself into a real mess and continually fired interrupts. From Dave
Marples.

* Microchip i.MXRT Boards:

- IMXRT1020-EVK: Make naming of the LED consistent. In most places
it is referred to as LED1. In board.h it is referred to as
USERLED1. The i.MXRT1020-EVK hardware user guide (HUG) uses the
name USERLED. This command makes all names internally consistent
and consistent with the HUG. Noted by Alin Jerpelea. From Gregory
Nutt.

* NXP/Freescale Kinetis Boards:

- TWR-K60N512: Suppress errors related to card detect GPIO
configuration if SDHC support is not enabled. From Gregory Nutt.

* NXP LPC17xx/40xx Drivers:

- lpc17xx/40xx I2C: Respect the I2C_M_NOSTART flag. Sending a
restart condition when not requested will break other drivers that
depend on this behavior. From Augusto Fraga Giachero.
- LPC17xx/40xx Ethernet: Use usleep() instead of up_delay() for large
wait times. From Augusto Fraga Giachero.

* NXP LPC54xx:

- LPC54 Clocking: Fix PLL settings. For the lpc54628 Rev. E board
the PLL was not configured properly and the board would not boot
correctly. I checked the startup files from the official IDE and
inspected the assembly instructions for the libraries used. From
Andrei Stefanescu.

* NXP i.MXRT Boards:

- IMXRT1060-EVK: Fix FT5X06 CTRSTn pin configuration, increased
number of pollwaiters for the FT5X06, tuned resolution during
pointer dragging. From Fabio Balzano.

* On Semiconductor Boards:

- LC823450: Fix cpustart() implementation. In Cortex-M, offset 0 in
vector table stores initial stack pointer and offset 4 stores reset
vector. From Masayuki Ishikawa.
- LC823450-XGEVK: Fix build error for posix_spawn. From Masayuki
Ishikawa.

* Sony CXD56xx:

- CXD56xx Assertions: Replace some assertions with error return
values. From Alin Jerpelea.
- CXD56xx Interrupts: Fix hang-up when error interrupt occurs. From
Alin Jerpelea.
- CXD56xx Pin Configuration: PIN_AP_CLK is used as a port selector of
SDIO expander on the extension board, and is set output low in
initialization. Therefore, this pin cannot be used by the other
board. To avoid this restriction, remove this initial operation
because this pin is pulled down by default on the extension board.
From Alin Jerpelea.
- CXD56xx: Remove duplicate NVIC_SYSH redefinitions. The NVIC_SYSH
is already defined in nvicpri.h From Alin Jerpelea.

* Sony CXD56xx Drivers:

- CXD56xx SDHCI: Fix initial value of semaphore in sdhci driver.
From Alin Jerpelea.

* Sony CXD56xx Boards:

- Spresense: The SD Card TXS02612 port expander is hosted on the
Extension board and should not be enabled if the extension board is
not present. From Alin Jerpelea.

* STMicro STM32:

- STM32 F4 Pin Multiplex: Ethernet pin ETH_RMII_REF_CLK is an input.
From Gregory Nutt.
- STM32 H7 ADC: Fix typos in ADC register definitions. From Markus
Bernet.
- STM32 H7: Heap allocation, SRAM and SRAM1 are not continuous From
David Sidrane.
- STM32 H7 CRC: Add the CRC option in KConfig. From Eduard Niesner.
- STM32 H7 RCC: Add PLL3 Support and only enable PLLs if used. From
David Sidrane.
- STM32 L4x6xx RCC: This fix is needed if HSI clock is selected.
Otherwise when waking up from STOP mode, the MSI clock is selected
instead of the HSI clock. From Matias N.

* STMicro STM32 Drivers:

- STM32 USB Host: There was no relationship between
CONFIG_STM32_USBHOST and CONFIG_USBHOST, yet they they were used
interchangeably. This means that can (and did) get out of synch
causing link time failures. This change adds logic to select
CONFIG_USBHOST when CONFIG_STM32_USBHOST is selected, keeping the
two settings synchronized. Furthermore, since CONFIG_STM32_USBHOST
is the authoritative setting, all occurrences of CONFIG_USBHOST were
replaced with CONFIG_STM32_USBHOST. From Gregory Nutt.
- STM32 SDIO: SDIO Fix system hang on card eject. From David Sidrane.
- STM32 F7 Ethernet: Large Ethernet packet can leads network halt.
From Bazooka Joe.
- STM32F7 OTGHOST: OTGFS_EPTYPE_INTR should be OTG_EPTYPE_INTR. From
Gregory Nutt.
- STM32 F7 SDMMC: SDMMC Fix system hang on card eject. From David
Sidrane.
- STM32 L4 Firewall: Correct a test to determine if an address lies
in FLASH or not. Improper mask caused test to always fail. From
Gregory Nutt.
- STM32 H7 Ethernet: Bazooka Joe's fix to the STM32 F7 Ethernet
driver should be applied to the H7 as well. The other STM32
Ethernet drivers already have the change. From Gregory Nutt.
- STM32 H7 Ethernet: Fix ETH_MACMDIOAR_CR_MASK bit mask. From Markus
Bernet.
- STM32 H7 SDMMC: SDMMC Fix system hang on card eject. From Gregory
Nutt.
- STM32 H7 FLASH: Flash driver BUG fixes. From David Sidrane.
- STM32 H7 TIM: Correct register bit definitions and alternate
functions. Fix other copy-paste definitions. From Daniel Pereira
Volpato.
- STM32 L4 SDMMC: SDMMC Fix system hang on card eject. From David
Sidrane.

* STMicro STM32 Boards:

- STM32F4-Discovery: Fix build error for posix_spawn. From Masayuki
Ishikawa.

* TI Tiva:

- TIVA IRQs: Fix wrong IRQ vector number. From Nathan Hartman.
- Tiva FLASH: Fix several mistakes in tiva_write(). (1) Fix wrong
use of && when & was intended. (2) Add compile- time warning
directive because according to this function's interface, it is
supposed to support unaligned writes and/or writes of arbitrary
numbers of bytes to FLASH. However, this function does NOT support
that at this time. This needs to be fixed. (3) Fix wrong
preprocessor conditional. Was written to use the 32-word write
buffer only for TM4C1294NCPDT. This buffer is available on all
M4C123 and TM4C129 parts. Now conditioned upon
CONFIG_ARCH_CHIP_TM4C123 or CONFIG_ARCH_CHIP_TM4C129. (4) Add
comments to document the intent of the above preprocessor logic.
From Nathan Hartman.

* Xtensa

- Xtensa: Apply Masayuki Ishakawa's change for ARMv7-M to this SMP
architecture as well. From Gregory Nutt.

* Build System:

- Makefiles: Change ${shell pwd} to $(CURDIR) since pwd doesn't exist
on Windows From Xiang Xiao.
- tools/Makefile.unix: Fix build error when issue 'make -B': "mkdir:
cannot create directory 'staging': File exists:
tools/Makefile.unix:269: recipe for target 'staging' failed". From
Xiang Xiao.
- All ARM linker scripts: Preface all _ebss definitions with '. =
ALIGN(4)'. Otherwise, the following .bss section may not be aligned
properly. From Gregory Nutt.
- MIPS Linker Scripts: The PIC32M* start-up code initializes .bss by
writing 16 bytes at a time in a loop. The start (_sbss) alignment
is only required to be 4 bytes since the write is done with 4 store
instructions. From Gregory Nutt.
- Top-level Kconfig: Add some protection so that you cannot select an
architecture-specific header file if the architecture does not
provide the header file. From Gregory Nutt.
- libc Kconfig: Should select the NuttX float.h file automatically
if the NuttX math library is selected. From Gregory Nutt.
- tools/Makefile.unix: Make COMMON_DIR work with
CONFIG_ARCH_BOARD_CUSTOM. From Xiang Xiao.
- tools/ Make fragments: Fix the various minor issue for NUTTXLIBS /
USERLIBS: (1) Remove libcxx duplication in FlatLibs.mk and from
kernel space, (2) Remove libpass1 from KernelLibs.mk since kernel
build doesn't support the two pass mode, and (3) Remove FSDIR
related comment since file system cannot be disabled now From Xiang
Xiao.

* C Library/Header Files:

- getcwd(): Remove stray sched_unlock(). Also fixes several typos.
From Juha Niskanen.
- date(), hostname(): Fix portability issue with date, hostname From
David Alessio.
- libs/libxx/Kconfig: Automatically select CONFIG_CLOCK_MONOTONIC when
CONFIG_LIBCXX is selected. Removed hardcoded -DCLOCK_MONOTONIC from
CFLAGS in Make.defs of several configurations. That definition is
now automatically adding this define when CONFIG_LIBCXX=y. From
Daniel Pereira Volpato.
- libs/libxx/Kconfig: CONFIG_LIBC_LOCALE is needed to build libcxx.
A math library is also needed, however, there are various ways to
provide a math library so CONFIG_LIBM is not now set. From Matias
N.
- libs/libc/symtab: Move symbol table generation into libc since the
address in symbol table should come from userspace binary for
PROTECTED build, not kernel binary. From Xiang Xiao.
- libs/libc/ Kconfig files: Disable EXECFUNCS_HAVE_SYMTAB for kernel
build. The symbol table doesn't have any meaning for kernel build
since all executable binary should be self contained. From Xiang
Xiao.

- include/sys/time.h: According to earlier standards, usage of
select(), FD_CLR, FD_ISSET, FD_SET and FD_ZERO just need include
headers: sys/time.h, sys/types.h and unistd.h. So include
sys/select.h in time.h to compatible with it. Or mbedtls library
would build break in calling select() and FD_* related functions.
From liuhaitao.

* Tools:

- tools/configure.sh and configure.c: Do not remove CONFIG_SIM_M32 if
host is specified. From anchao.
- tools/Directories.mk: Remove FSDIRS/NOFSDIRS related logic/comments
since the file system can no longer be disabled now. From Xiang
Xiao.
- tools/Makefile.host: Add missing binaries from clean target. From
Gregory Nutt.
- tools/mkromfsimg.sh: Use sed to add const to ROMFS declarations so
that they lie in FLASH not RAM. From Bernd Walter.
- tools/nxstyle.c: Correct detection of missing blank line following
a block comment. From Gregory Nutt.

* apps/ Build System:

- Makefiles: Change ${shell pwd} to $(CURDIR) since pwd doesn't exist
on Windows From Xiang Xiao.
- Makefile: Fix warning: jobserver unavailable: using -j1. Add '+' to
parent make rule. From Xiang Xiao.
- apps/Application.mk: Correct an error in PATH usage. Use of
toolchain path causes make errors. From Gregory Nutt.

* apps/tools:

- tools/mkromfsimg.sh: Use sed to add const to ROMFS declarations so
that they like in FLASH not RAM. From Bernd Walter.

* Examples: apps/examples:

- apps/examples/mount: Replace illegal call to ramdisk_register()
with a call to boardctl(BOARDIOC_MKRD). From Gregory Nutt.
- apps/examples/nxlines/: Correct nxlines example program name. From
Gregory Nutt.
- apps/examples/nxterm/: PROGNAME, PRIORITY, STACKSIZE variable
names did not match declarations in Kconfig file. From Gregory
Nutt.
- apps/examples/romfs: Remove romfs_testdir.h. That file is
regenerated whenever the example is built and so should not be in
the repository. From Gregory Nutt.

* Testing: apps/testing:

- apps/testing/cxxtest/: Fix typo error in testing/cxxtest. From
Xiang Xiao.
- apps/testing/unity/: Fix the error when creating Make.dep. From
raiden00pl.

* NSH Library: apps/nshlib:

- apps/nshlib: Remove the inappropriate NSH_BUILTIN_APPS coupling.
From Xiang Xiao.
- apps/nshlib/: The NSH mkrd command was in violation of the NuttX
portable POSIX interface. It was calling the internal OS function
ramdisk_register() directly. Not only is this a violation of the
interface specification, but also prevents use of mkrd in PROTECTED
or KERNEL builds. With this change, the NSH mkrd command now uses
the BOARDIOC_MKRD boardctl() command. This command is available in
all build modes. The effect of this change is to move the heart of
the NSH mkrd command into to OS and provide user-space access via
boardctl(). From Gregory Nutt.
- apps/nshlib/: Replace direct calls to romdisk_register() with
indirect calls via boardioctl(BOARDIOC_ROMDISK). This not only
fixes the violation of the portable POSIX OS interface, but also
permits use of ROM disks in PROTECTED and KERNEL modes. From
Gregory Nutt.
- apps/nshlib/: Add missing NSH_DISABLE_DMESG from Kconfig. From
Juha Niskanen.

* System Utilities: apps/system:

- apps/system/cle/: This change modifies the cle to use the streams
file interface more consistently and has removed the observed race
conditions. It was previously a mix of streams and fileio. It
also simplifies the VT100 cursor position handling. From Dave
Marples.
- apps/system/composite: Remove usb serial loopback test code we can
achieve the same effect by cat or dd command. From Xiang Xiao.
- apps/system/cu/: (1) Fix early exit. getc(stdin) can return 0 the
first time around. (2) Set optind to zero. getopt() was being
left in a bad state, causing parsing errors on second use. (3) Fix
priority of cu_listen(). (4) Add support for -h. From David
Alessio.
- apps/system/lzf/: Check the protection by CONFIG_SYSTEM_LZF !=
CONFIG_m (not elf binary) instead of CONFIG_KERNEL_BUILD. From
Xiang Xiao.
- apps/system/spi: Correctly parse exch txdata args, if any. Should
always call the board's deselect From David Alessio.

* File System Utilities: apps/fsutils:

- apps/fsutils/passwd/: Use named semaphore by checking
CONFIG_FS_NAMED_SEMAPHORES instead of CONFIG_KERNEL_BUILD. From
Xiang Xiao.

* Network Utilities: apps/netutils:

- apps/netutils/cjson/Makefile: Fix the error when creating
Make.dep. From raiden00pl.

* Graphics: apps/graphics:

- apps/graphics/twm4nx/: Fix a recently introduced error that broke
all Twm4Nx configurations. From Gregory Nutt.
- apps/graphics/traveler/: Replace direct calls to romdisk_register()
with indirect calls via boardioctl(BOARDIOC_ROMDISK). This not only
fixes the violation of the portable POSIX OS interface, but also
permits use of ROM disks in PROTECTED and KERNEL modes. From
Gregory Nutt.
